
//
// !!!修改文件后调用 npm run buildJs 生成 ui-utils-all.js
//

"use strict";

import jQuery from 'jquery';
import { uiUtils } from "./ui-utils-core";
import { globalUtils } from '../global-utils/global-utils-all';

/* SOURCE-CODE-START */

/**
 * @namespace uiUtils-tree
 */

var _tree = {};
uiUtils.tree = _tree;

/**
 * @memberof uiUtils-tree
 * @description 初始树形控件
 * @param {jQuery} jqElement 
 * @param {*} [opts] - 方法 $().jstree([arg]) 的参数
 * @returns {jQuery}
 */
_tree.init = function (jqElement, opts) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  opts = globalUtils.emptyObjectIfNullOrUndefined(opts);
  var initOpts = {
    'core': {
      // 默认最多选中一行
      'multiple': false,
      'themes': {
        // 默认不显示图标
        'icons': false
      }
    },
    'plugins': []
  };

  // 绑定事件
  jqElement.trigger('on_init.tree.uiUtils');

  var newOpts = globalUtils.mergeObjects(initOpts, opts);
  jqElement.jstree(newOpts);

  return jqElement;
};

/**
 * @memberof uiUtils-tree
 * @description 在初始时绑定事件
 * @param {jQuery} jqElement 
 * @param {...any} [dynamicArgs] 
 */
_tree.bindEventOnInit = function (jqElement) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  var dynamicArgs = [];

  for (var index = 1; index < arguments.length; ++index) {
    dynamicArgs.push(arguments[index]);
  }

  jqElement.on('on_init.tree.uiUtils', function () {
    jqElement.on.apply(jqElement, dynamicArgs);
  });
}

/**
 * @memberof uiUtils-tree
 * @description 销毁树形控件
 * @param {jQuery} jqElement 
 * @returns {jQuery}
 */
_tree.destroy = function (jqElement) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  jqElement.jstree('destroy');

  return jqElement;
};

/**
 * @memberof uiUtils-tree
 * @description 清空树形控件
 * @param {jQuery} jqElement 
 * @returns {jQuery}
 */
_tree.empty = function (jqElement) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  jqElement.jstree('destroy');

  return jqElement;
};

/**
 * @memberof uiUtils-tree
 * @description 返回勾选的节点数组
 * @param {jQuery} jqElement 
 * @returns {Array}
 */
_tree.getCheckedNodes = function (jqElement) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  return jqElement.jstree('get_checked', true);
};


/**
 * @memberof uiUtils-tree
 * @description 返回勾选节点的ID数组
 * @param {jQuery} jqElement 
 * @returns {Array}
 */
_tree.getCheckedIds = function (jqElement) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  return jqElement.jstree('get_checked');
};

/**
 * @memberof uiUtils-tree
 * @description 返回选中的节点数组
 * @param {jQuery} jqElement 
 * @returns {Array}
 */
_tree.getSelectedNodes = function (jqElement) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  return jqElement.jstree('get_selected', true);
};

/**
 * @memberof uiUtils-tree
 * @description 返回选中节点的ID数组
 * @param {jQuery} jqElement 
 * @returns {Array}
 */
_tree.getSelectedIds = function (jqElement) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }


  return jqElement.jstree('get_selected');
};


/* SOURCE-CODE-END */

export { uiUtils, _tree };
